#ifndef __LINKTREE_H_
#define __LINKTREE_H

#define ElementType struct UniversalType //通用数据类型结构体宏定义

enum Type
{
    charPoint,  //数据类型枚举
    intPoint,
    structPoint
};

struct UniversalType
{
    void *value;    //数据指针
    enum Type type; //数据类型
};

typedef struct LinkTreeNode
{

    ElementType data;//树节点数据
    struct LinkTreeNode *firstChild;//树孩子节点指针
    struct LinkTreeNode *nextsibling;//树兄弟节点指针
    struct LinkTreeNode *parent;//树父节点指针
} LTNode;

typedef struct LinkTree
{
    LTNode *root;//树根节点
} LTree;

// 初始化
int InitLTree(LTree *ftree);
// 创建树节点
LTNode *CreateTreeNode(ElementType element);
// 链接
void ConnectBranch(LTNode *parent, LTNode *child);
// 断开
void DisconnectBranch(LTNode *parent, LTNode *child);
// 释放节点
void FreeNode(LTNode *tree);
// 释放树
void FreeTree(LTree *xtree);
// 遍历
void TravelTree(LTree *tree, void (*func)(ElementType));
// 树高
int GetTreeHeight(LTree *tree);
// 发现节点
LTNode *FindTreeNode(LTree *tree, ElementType element, int (*func)(ElementType, ElementType));

#endif

// 树
//